home *** CD-ROM | disk | FTP | other *** search
/ MacFormat 1995 March / macformat-022.iso / Shareware City / Graphics / SPD / README < prev   
Encoding:
Text File  |  1994-10-23  |  25.7 KB  |  513 lines  |  [TEXT/ttxt]

  1. README
  2. ======
  3.  
  4. STANDARD PROCEDURAL DATABASES, by Eric Haines, 3D/Eye, Inc.
  5.  
  6. [Created while under contract to Hewlett-Packard FSD and HP Laboratories]
  7. Version 3.4, as of 10/21/94
  8.     address: 3D/Eye, Inc., 1050 Craft Road, Ithaca, NY 14850
  9.     email: erich@eye.com
  10.  
  11. This software package is not copyrighted and can be used freely.
  12.  
  13. History
  14. -------
  15. Versions 1.0 to 1.5 released February to June, 1987 for testing.
  16. Version 2.0 released July, 1987.
  17. Version 2.1 released August, 1987 - corrected info on speed of the HP 320,
  18.     other minor changes to README.
  19. Version 2.2 released November, 1987 - shortened file names to <=12 characters,
  20.     procedure names to <= 32 characters, and ensured that all lines are <= 80
  21.     characters (including return character).
  22. Version 2.3 released March, 1988 - corrected gears.c to avoid interpenetration,
  23.     corrected and added further instructions and global statistics for ray
  24.     tracing to README.
  25. Version 2.4 released May, 1988 - fixed hashing function for mountain.c.
  26. Version 2.5 released October, 1988 - added NFF documentation.
  27. Version 2.6 released August, 1989 - lib_output_cylcone fix (start_norm.w was
  28.     not initialized).
  29. Version 2.7 released July, 1990 - comment correction in lib.c, NFF file
  30.     clarifications.
  31. Version 3.0 released October, 1990 - added teapot.c database, mountain.c
  32.     changed to mount.c, additions to def.h and lib.c, changes to README and
  33.     NFF, added patchlevel.h file.
  34. Version 3.1 released November, 1992 - minor typo fixes, updated FTP list,
  35.     makefile update
  36. Version 3.1a released November, 1993 - readnff added, lib split into multiple
  37.     smaller files, mac code updated
  38. Version 3.2 released May, 1994 - added RIB output, readdxf added, more updates
  39. Version 3.3 released June, 1994 - added DXF output, more lib splitting, etc
  40. Version 3.3f4 released August, 1994 - fixes to Mac files (see README.MAC),
  41.     error handling for Mac added to readnff program.
  42. Version 3.4 released October, 1994 - Larry Gritz fixes to RenderMan output.
  43.  
  44.  
  45. {These files use tab characters worth 8 spaces}
  46.  
  47.  
  48. Introduction
  49. ------------
  50.  
  51.     This software is meant to act as a set of basic test images for ray
  52. tracing algorithms.  The programs generate databases of objects which are
  53. fairly familiar and "standard" to the graphics community, such as the teapot,
  54. a fractal mountain, a tree, a recursively built tetrahedral structure, etc.  I
  55. originally created them for my own testing of ray tracing efficiency schemes.
  56. Since their first release other researchers have used them to test new
  57. algorithms.  In this way, research on algorithmic improvements can be compared
  58. in a more standardized way.  If one researcher ray-traces a car, another a
  59. tree, the question arises, "How many cars to the tree?"  With these databases
  60. we may be comparing oranges and apples ("how many hypercubes to a timeshared
  61. VAX?"), but it's better than comparing oranges and orangutans.  In addition,
  62. this document outlines some statistics that are more meaningful to researchers
  63. than raw timing tests.  Using these statistics along with the same scenes
  64. allows us to compare results in a more meaningful way.
  65.  
  66.     With the development and release of the Anderson benchmarks for graphics
  67. hardware, the use of the SPD package for hardware testing is somewhat
  68. redundant.  Therefore I have deleted references to testing hidden-surface
  69. algorithms in this version.  However, another interesting use for the SPD has
  70. been noted:  debugging.  By comparing the images and the statistics with the
  71. output of your own ray tracer, you can detect program errors.  For example,
  72. "mount" is useful for checking if refraction rays are generated correctly, and
  73. "balls" can check for the correctness of eye and reflection rays.
  74.  
  75.     The images for these databases and other information about them can be
  76. found in "A Proposal for Standard Graphics Environments," IEEE Computer
  77. Graphics and Applications, vol. 7, no. 11, November 1987, pp.  3-5.  See
  78. IEEE CG&A, vol. 8, no. 1, January 1988, p. 18 for the correct image of the
  79. tree database (the only difference is that the sky is blue, not orange).  The
  80. teapot database was added later, and consists of a shiny teapot on a shiny
  81. checkerboard.
  82.  
  83.     The SPD package is available via anonymous FTP from:
  84.  
  85.     freedom.graphics.cornell.edu [128.84.247.85]
  86.     weedeater.math.yale.edu [130.132.23.17]
  87.     cs.uoregon.edu [128.223.4.13]
  88.  
  89. among others.  For those without FTP access, write to the netlib automatic
  90. mailer:  research!netlib and netlib@ornl.gov are the sites.  Send a one line
  91. message "send index" for more information, or "send haines from graphics" for
  92. the latest version of the SPD package.
  93.  
  94.  
  95. File Structure
  96. --------------
  97.  
  98.     Eight different procedural database generators are included.  These were
  99. designed to span a fair range of primitives, modeling structures, lighting and
  100. surface parameters, background conditions, and other factors.  A complexity
  101. factor is provided within each program to control the size of the database
  102. generated.
  103.  
  104. This software package contains the following files:
  105.  
  106.     README - what you are now reading
  107.     NFF - a description of the Neutral File Format used in the SPD
  108.     patchlevel.h - keeps track of patch level
  109.     makefile - used to make the programs (in HP-UX Unix)
  110.     def.h - some useful "C" definitions
  111.     lib.h - globals and library routine declarations
  112.     lib.c - library of routines
  113.     balls.c - fractal ball object (a.k.a. sphereflake) generator
  114.     gears.c - 3D array of interlocking gears generator
  115.     mount.c - fractal mountain and 4 glass ball generator
  116.     rings.c - pyramid of dodecahedral rings generator
  117.     teapot.c - the famous teapot on a checkerboard generator
  118.     tetra.c - recursive tetrahedra generator
  119.     tree.c - tree generator
  120.  
  121.     The compiled and linked programs will output a database in ASCII to stdout
  122. containing viewing parameters, lighting conditions, material properties, and
  123. geometric information.  The data format is called the 'neutral file format'
  124. (or NFF) and is described in the `NFF' file.  This format is meant to be
  125. minimal and easy to attach to a user-written filter program which will convert
  126. the output into a file format of your choosing.
  127.  
  128.     Either of two sets of primitives can be selected for output.  If
  129. OUTPUT_FORMAT is defined as OUTPUT_CURVES, the primitives are spheres, cones,
  130. cylinders, and polygons.  If OUTPUT_FORMAT is set to OUTPUT_PATCHES, the
  131. primitives are output as polygonal patches and polygons (i.e.  all other
  132. primitives are polygonalized).  In this case OUTPUT_RESOLUTION is used to set
  133. the amount of polygonalization of non-polygonal primitives.  In general,
  134. OUTPUT_CURVES is used for ray-trace timing tests, and OUTPUT_PATCHES for
  135. polygon-based algorithm timings.  Note that sphere primitives are not
  136. polygonalized using the simple longitude/latitude tessellation, but rather are
  137. chopped along the six faces of a cube projected onto the sphere.  This
  138. tessellation avoids generation of the cusp points at the sphere's poles and so
  139. eliminates discontinuities due to them.
  140.  
  141.     The size factor is used to control the overall size of the database.
  142. Default values have been chosen such that the maximum number of primitives
  143. less than 10,000 is output.  One purpose of the size factor is to avoid
  144. limiting the uses of these databases.  Depending on the research being done
  145. and the computing facilities available, a larger or smaller number of
  146. primitives may be desired.  The size factor can also be used to show how an
  147. algorithm's time changes as the complexity increases.
  148.  
  149.     To generate the databases, simply type the name of the database and direct
  150. the output as desired, e.g. "balls > balls.nff" creates the default sized
  151. database and sends the output to balls.nff.  A new feature in 3.0 is that you
  152. can enter the size factor on the command line, e.g. "balls 2 > balls.nff"
  153. gives a much smaller database of 91 spheres.  See the header of the database C
  154. file (e.g. "balls.c") for how the size factor affects the output.
  155.  
  156.     Other parameters in the code itself (for example, branching angles for
  157. "tree.c" and the fractal dimension in "mount.c") are included for your own
  158. enjoyment, and so normally should not be changed if the database is used for
  159. timing tests.  Because the hashing function in the original release of
  160. "mount.c" is not very good (at low resolutions there is patterning), there is
  161. a better hashing function provided which can be turned on by defining
  162. NEW_HASH.  Use the old hashing function (i.e.  don't change anything) for
  163. consistency with previously published results.
  164.  
  165.     Since the SPD package is designed to test efficiency, the actual shading
  166. of the images is mostly irrelevant.  All that matters is that reflective
  167. surfaces spawn reflection rays and transmitters spawn refraction rays.  For
  168. this reason the effect of the other shading parameters is up to the
  169. implementer.  Note that light intensities, ambient components, etc. are not
  170. specified.  These may be set however you prefer.  Feel free to change any
  171. colors you wish (especially the garish colors of `rings').  The thrust of
  172. these databases is the testing of rendering speeds, and so the actual color
  173. should not affect these calculations.  An ambient component should be used for
  174. all objects, so that the time to compute it is included in the ray tracing
  175. statistics.  A simple formula for a relative intensity (i.e. between 0 and
  176. 1) for each light and for the ambient component is the following:
  177.  
  178.     sqrt(# lights) / (# lights * 2).
  179.  
  180.     If you desire a model for a good scene description language, NFF is not
  181. it.  Instead, you should look at Craig Kolb's ray-tracer language, which is
  182. part of his excellent RayShade ray tracer, available via anonymous FTP from
  183. weedeater.math.yale.edu [130.132.23.17].  Of the public domain ray tracers,
  184. this is the one to beat in speed.  Also included in his distribution is an awk
  185. filter which converts NFF files to his language.
  186.  
  187.     The programs all attempt to minimize program size (for ease in
  188. distributing) and memory usage, and none allocate any dynamic memory.  As
  189. such, many of the programs are relatively inefficient, regenerating various
  190. data again and again instead of saving intermediate results.  This behavior
  191. was felt to be unimportant, since generating the data is a one-time affair
  192. which normally takes much less time than actually rendering the scene.
  193.  
  194.  
  195. Database Analysis
  196. -----------------
  197.  
  198.     The databases were designed with the idea of diversity in mind.  The
  199. variables considered important were the amount of background visible, the
  200. number of lights, the distribution of sizes of objects, the amount of
  201. reflection and refraction, and the depth complexity (how many objects a ray
  202. from the eye passes through).
  203.  
  204. balls:  This database is sometimes called "sphereflake", as it is generated
  205.     like a snowflake curve.  This database consists mostly of various sized
  206.     spheres.  It has no eye rays which hit the background, and the three light
  207.     sources cause a large number of shadow rays to be generated.
  208.  
  209. gears:  This database consists of a set of meshed gears.  Some of the gears
  210.     are transmitters, making this database lengthy to render.  The gear faces
  211.     each have 144 vertices, and thus tests polygon inside/outside test
  212.     efficiency.  Depth complexity is medium.
  213.  
  214. mount:  The fractal mountain generator is derived from Loren Carpenter's
  215.     method, and the composition with the four glass spheres is inspired by
  216.     Peter Watterberg's work.  Most objects are tiny (i.e. fractal facets),
  217.     but rendering time is dominated by the rendering of the four large
  218.     spheres.  Depth complexity is low, and there is much background area.
  219.  
  220. rings:  Objects with six pentagonal rings form a pyramid against a background
  221.     polygon.  With a high amount of interreflection and shadowing, this scene
  222.     is fairly lengthy to render.  Depth complexity is also high, with
  223.     all of the objects partially or fully obscured.
  224.  
  225. teapot:  The famous teapot on a checkerboard.  There are a number of
  226.     variations on the teapot database, i.e.  whether the bottom is included
  227.     (the IEEE CG&A article added a bottom), variations in the control points
  228.     on the lid (which creates thin, almost degenerate triangles), etc.  For
  229.     this database generator, the bottom is created, and the degenerate
  230.     polygonal patches at the center of the lid and bottom are not output.  The
  231.     bottom of the teapot is not flat, interestingly enough.  The resolution of
  232.     the checkerboard shows the resolution of the teapot meshing (with each
  233.     teapot quadrilateral cut into two triangles), e.g. an 8x8 checkerboard
  234.     means that 8x8x2 triangles are generated per patch.  The definitions for
  235.     the 32 Bezier patches are a part of the program.  All objects are
  236.     reflective and there are two light sources.  Depth complexity is low.
  237.  
  238. tetra:  A recursive tetrahedral pyramid, first visualized by Benoit Mandelbrot
  239.     and Alan Norton.  This scene is dominated by background (around 80%).  With
  240.     the objects not being reflective and there being only one light source,
  241.     this database is particularly quick to render, with various forms of
  242.     coherency being very useful.  Depth complexity is medium, though some
  243.     rays must pass by many triangles for some of the background pixels.
  244.  
  245. tree:  A tree formed using Aono and Kunii's tree generation method.  With
  246.     seven light sources, the emphasis is on shadow testing.  Shadow caching
  247.     yields little improvement due to the narrow primitives, and many shadow
  248.     rays pass through complex areas without hitting any objects.  There is a
  249.     fair amount of background area.  Depth complexity is low.
  250.  
  251.  
  252.         balls      gears       mount       rings
  253.         -----      -----       -----       -----
  254. primitives        SP         P           PS         YSP
  255. total prim.      7382       9345        8196        8401
  256. poly/patches    1417K       9345        8960        874K
  257.  
  258. lights            3          5           1           3
  259. background        0%         7%         34%          0%
  260. specular         yes        yes         yes         yes
  261. transmitter       no        yes         yes          no
  262.  
  263. eye hit rays   263169     245086      173125      263169
  264. reflect rays   175095     304643      354769      315236
  265. refract rays        0     207564      354769           0
  266. shadow rays    954368    2246955      412922     1085002
  267.  
  268.  
  269.            teapot       tetra        tree
  270.            ------       -----        ----
  271. primitives       TP           P           OSP
  272. total prim.      9264        4096        8191
  273. poly/patches     9264        4096        852K
  274.  
  275. lights            2           1           7
  276. background       39%         81%         35%
  277. reflector        yes          no          no
  278. transmitter       no          no          no
  279.  
  280. eye hit rays   161120       49788      169836
  281. reflect rays   225248           0           0
  282. refract rays        0           0           0
  283. shadow rays    407656       46112     1097419
  284.  
  285.  
  286.     "primitives" are S=sphere, P=polygon, T=polygonal patch, Y=cylinder,
  287. O=cone, listed from most in database to least.
  288.  
  289.     "total prim." is the total number of ray-tracing primitives (polygons,
  290. spheres, cylinders and cones) in the scene.  The number of polygons and vectors
  291. generated is a function of the OUTPUT_RESOLUTION.  The default value for this
  292. parameter is 4 for all databases.
  293.  
  294.     "poly/patches" is the total number of polygons and polygonal patches
  295. generated when using OUTPUT_PATCHES.
  296.  
  297.     "lights" is simply the number of lights in a scene.  "background" is the
  298. percentage of background color (empty space) seen directly by the eye for the
  299. given view.  "reflector" tells if there are reflective objects in the scene,
  300. and "transmitter" if there are transparent objects.
  301.  
  302.     "eye hit rays" is the number of rays from the eye which actually hit an
  303. object (i.e. not the background).  513x513 eye rays are assumed to be shot
  304. (i.e. one ray per pixel corner).  "reflect rays" is the total number of rays
  305. generated by reflection off of reflecting and transmitting surfaces.  "refract
  306. rays" is the number of rays generated by transmitting surfaces.  "shadow rays"
  307. is the sum total of rays shot towards the lights.  Note that if a surface is
  308. facing away from a light, or the background is hit, a light ray is not formed.
  309. The numbers given can vary noticeably from a given ray tracer, but should all
  310. be within about 10%.
  311.  
  312.     "K" means exactly 1000 (not 1024), with number rounded to the nearest K.
  313. All of the above statistics should be approximately the same for all
  314. classical ray tracers.
  315.  
  316.  
  317. Testing Procedures
  318. ------------------
  319.  
  320. Below are listed the requirements for testing various algorithms.  These test
  321. conditions should be realizable by most renderers, and are meant to represent
  322. a common mode of operation for each algorithm.  Special features which the
  323. software supports (or standard features which it lacks) should be noted in
  324. your statistics.
  325.  
  326.     1)  The non-polygon (OUTPUT_CURVES) format should normally be used for
  327.     ray-tracing tests.
  328.  
  329.     2)  All opaque (non-transmitting) primitives can be considered one-sided
  330.     for rendering purposes.  Only the outside of primitives are visible in
  331.     the scenes.  The only exception to this is the "teapot" database, in
  332.     which the teapot itself should normally be double sided (this is
  333.     necessary because the lid of the teapot does not fit tightly, allowing
  334.     the viewer to see back faces).
  335.  
  336.     3)  Polygonal patches (which are always triangles in the SPD) should have
  337.     smooth shading, if available.
  338.  
  339.     4)  Specular highlighting should be performed for surfaces with a
  340.     reflective component.  The simple Phong distribution model is
  341.     sufficient.
  342.  
  343.     5)  Light sources are positional.  If unavailable, assign the directional
  344.     lights a vector given by the light position and the viewing "lookat"
  345.     position.
  346.  
  347.     6)  Render at a resolution of 512 x 512 pixels, shooting rays at the
  348.     corners (meaning that 513 x 513 eye rays will be created).  The four
  349.     corner contributions are averaged to arrive at a pixel value.  If
  350.     rendering is done differently, note this fact.  No pixel subdivision
  351.     is performed.
  352.  
  353.     7)  The maximum tree depth is 5 (where the eye ray is of depth 1).  Beyond
  354.     this depth rays do not have to be spawned.
  355.  
  356.     8)  All rays hitting only reflective and transmitting objects spawn
  357.     reflection rays, unless the maximum ray depth was reached by the
  358.     spawning ray.  No adaptive tree depth cutoff is allowed; that is, all
  359.     rays must be spawned (adaptive tree depth is a proven time saver and
  360.     is also dependent on the color model used - see Roy Hall's work for
  361.     details).
  362.  
  363.     9)  All rays hitting transmitting objects spawn refraction rays, unless
  364.     the maximum ray depth was reached or total internal reflection occurs.
  365.     Transmitting rays should be refracted using Snell's Law (i.e. should
  366.     not pass straight through an object).  If total internal reflection
  367.     occurs, a reflection ray should still be generated at this node.  Note
  368.     that all transmitters in the SPD are also reflective, but this is
  369.     not a requirement of the file format itself.
  370.  
  371.     10) A shadow ray is not generated if the surface normal points away from
  372.     the light.  This is true even on transmitting surfaces.  Note any
  373.     changes from this condition.
  374.  
  375.     11) Assume no hierarchy is given with the database (for example, color
  376.     change cannot be used to note a clustering).  The ray tracing program
  377.     itself can create its own hierarchy, but this process should be
  378.     automatic.  Note any exceptions to this (e.g. not including the
  379.     background polygon in the efficiency structure, changing the
  380.     background polygon into an infinite plane, etc).  Such changes can be
  381.     critical for the efficiency of some schemes, so an explanation of why
  382.     changes were made is important.
  383.  
  384.     12) Timing costs should be separated into at least two areas: preprocessing
  385.     and ray-tracing.  Preprocessing includes all time spent initializing,
  386.     reading the database, and creating data structures needed to ray-trace.
  387.     Preprocessing should be all the constant cost operations--those that
  388.     do not change with the resolution of the image.  Ray-tracing is the
  389.     time actually spent tracing the rays (i.e. everything that is not
  390.     preprocessing).
  391.  
  392.     13) Other timing costs which would be of interest are in a breakdown of
  393.     times spent in preprocessing and during actual ray-tracing.  Examples
  394.     include time spent reading in the data itself, creating a hierarchy,
  395.     octree, or item buffer, and times spent on intersection the various
  396.     primitives and on calculating the shade.
  397.  
  398.     14) Time-independent statistics on the performance of the algorithm should
  399.     be gathered.  Some examples are the number of ray/object intersection
  400.     tests, the number of ray/object tests which actually hit objects,
  401.     number of octree or grid nodes accessed, and the number of successful
  402.     shadow cache hits.
  403.  
  404.  
  405. Timings
  406. -------
  407.  
  408. Rendering time of the ray-traced test set on an HP-835, optimized (512 x 512):
  409.  
  410.        Input   Setup  Ray-Tracing  |  Polygon   Sphere    Cyl/Cone    Bounding
  411.         (hr:min:sec)           |   Tests     Tests      Tests    Box Tests
  412. -------------------------------------------------------------------------------
  413. balls   0:14    0:19      24:56    |    822K     6197K        0        51726K
  414. gears   0:56    0:18    1:02:31    |  13703K       0          0       107105K
  415. mount   0:31    0:14      18:49    |   4076K     3978K        0        31106K
  416. rings   0:41    0:33      53:41    |   1045K     5315K     16298K      91591K
  417. teapot  1:02    0:18      25:38    |   7281K       0          0        57050K
  418. tetra   0:15    0:06       3:48    |    965K       0          0         7637K
  419. tree    0:40    0:31      11:36    |    479K      524K      1319K      22002K
  420.  
  421. Input:  time spent reading in the NFF file.
  422.  
  423. Setup:  time spent creating the database and any ray tracing efficiency
  424. structures, and cleaning up after ray trace (does not include "Input" time).
  425.  
  426. Ray-Tracing:  time spent traversing and rendering the pixel grid.
  427.  
  428.  
  429. A typical set of ray tracing intersection statistics for the tetra database is:
  430.  
  431. [these statistics should be the same for all users]
  432.   image size: 512 x 512
  433.   total number of pixels: 262144            [ 512 x 512 ]
  434.   total number of trees generated: 263169        [ 513 x 513 ]
  435.   total number of tree rays generated: 263169        [ no rays spawned ]
  436.   number of eye rays which hit background: 213381    [ 81% - might vary ]
  437.   average number of rays per tree: 1.000000
  438.   average number of rays per pixel: 1.003910
  439.   total number of shadow rays generated: 46111        [ might vary a bit ]
  440.  
  441. [these tests vary depending on the ray-tracing algorithm used]
  442. Intersector performance
  443.   Bounding box intersections:      7636497  -    26.71 usec/test
  444.   Polygon intersections:            964567  -    36.77 usec/test
  445.  
  446. Ray generation
  447.   Eye rays generated:              263169 ( 49788 hit - 18.92% )
  448.   Reflection rays generated:            0
  449.   Refraction rays generated:            0
  450.   Shadow rays generated:            46111
  451.       Coherency hits:                3407  -  7.39 % of total
  452.       Fully tested:                 42704
  453.  
  454.  
  455.     The ray-tracer which generated these statistics is based on hierarchical
  456. bounding boxes generated using Goldsmith & Salmon's automatic hierarchy method
  457. (see IEEE CG&A May 1987).  It no longer uses an item buffer, hence the higher
  458. number of overall intersection tests from earlier SPD versions.
  459.  
  460.     One problem worth analyzing when using the SPD for efficiency tests is how
  461. octree, SEADS, and other space dividing algorithms perform when the background
  462. polygon dimensions are changed (thus changing the size of the outermost
  463. enclosing box, which changes the encoding of the environment).  One analysis of
  464. the effect of the background polygon on RayShade can be found in "Ray Tracing
  465. News", volume 3, number 1.
  466.  
  467.  
  468. Future Work
  469. -----------
  470.  
  471.     These databases are not meant to be the ultimate in standards, but are
  472. presented as an attempt at providing representative modeled environments.  A
  473. number of extensions to the file format could be provided someday, along with
  474. new database generators which use them.  The present databases do not contain
  475. polygons with holes, spline patches, polygonal mesh, triangular strip, or
  476. polyhedron data structures.  Modeling matrices are not output, and CSG
  477. combined primitives are not included.  Light sources are particularly
  478. simplistic.  For a richer, more user-friendly scene description language,
  479. take a look at RayShade or RenderMan.
  480.  
  481.     As far as database geometry is concerned, most scenes have a preponderance
  482. of small primitives.  If you find that these databases do not reflect the type
  483. of environments you render, please write and explain why (or better yet, write
  484. one or more programs that will generate your "typical" environments--maybe it
  485. will get put in the next release).
  486.  
  487.  
  488. Acknowledgements
  489. ----------------
  490.  
  491.     I originally heard of the idea of standard scenes from Don Greenberg back
  492. in 1984.  Some time earlier he and Ed Catmull had talked over coming up with
  493. some standard databases for testing algorithmic claims, and to them must go
  494. the credit for the basic concept.  The idea of making small programs which
  495. generate the data came to me after Tim Kay generously sent huge files of his
  496. tree database via email - I felt there had to be a better way.  Adding the
  497. teapot was inspired by the repeated demand on comp.graphics for this database,
  498. certainly the most famous of all.
  499.  
  500.     Many thanks to the reviewers, listed alphabetically:  Kells Elmquist, Jeff
  501. Goldsmith, Donald Greenberg, David Hook, Craig Kolb, Susan Spach, Rick Speer,
  502. K.R. Subramanian, J. Eric Townsend, Mark VandeWettering, John Wallace, Greg
  503. Ward, and Louise Watson.  Other people who have kindly offered their ideas and
  504. opinions on this project include Brian Barsky, Andrew Glassner, Roy Hall, Chip
  505. Hatfield, Tim Kay, John Recker, Paul Strauss, and Chan Verbeck.  These names
  506. are mentioned mostly as a listing of people interested in this idea.  They do
  507. not necessarily agree (and in some cases strongly disagree) with the validity
  508. of the concept or the choice of databases.
  509.  
  510.     Your comments and suggestions on these databases are appreciated.  Please
  511. do send me any timing results for software and hardware which you test, or any
  512. publications which use the SPD package.
  513.